package com.snail.clouds.common.utils;

import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.NumberUtil;

import java.util.List;

/**
 * 通用工具类
 * 包含字符串、数组、数字等常用工具方法
 */
public class CommonUtil {
    
    /**
     * 判断字符串是否为空
     * @param str 字符串
     * @return 是否为空
     */
    public static boolean isEmpty(String str) {
        return StrUtil.isEmpty(str);
    }
    
    /**
     * 判断字符串是否不为空
     * @param str 字符串
     * @return 是否不为空
     */
    public static boolean isNotEmpty(String str) {
        return StrUtil.isNotEmpty(str);
    }
    
    /**
     * 字符串格式化
     * @param template 模板
     * @param params 参数
     * @return 格式化后的字符串
     */
    public static String format(String template, Object... params) {
        return StrUtil.format(template, params);
    }
    
    /**
     * 生成随机数字
     * @param min 最小值
     * @param max 最大值
     * @return 随机数字
     */
    public static int randomInt(int min, int max) {
        return RandomUtil.randomInt(min, max);
    }
    
    /**
     * 生成随机字符串
     * @param length 长度
     * @return 随机字符串
     */
    public static String randomString(int length) {
        return RandomUtil.randomString(length);
    }
    
    /**
     * 生成UUID
     * @return UUID
     */
    public static String generateUUID() {
        return IdUtil.randomUUID();
    }
    
    /**
     * 生成雪花ID
     * @return 雪花ID
     */
    public static long generateSnowflakeId() {
        return IdUtil.getSnowflake().nextId();
    }
    
    /**
     * 判断数组是否为空
     * @param array 数组
     * @return 是否为空
     */
    public static boolean isEmpty(Object[] array) {
        return ArrayUtil.isEmpty(array);
    }
    
    /**
     * 判断数组是否不为空
     * @param array 数组
     * @return 是否不为空
     */
    public static boolean isNotEmpty(Object[] array) {
        return ArrayUtil.isNotEmpty(array);
    }
    
    /**
     * 判断集合是否为空
     * @param list 集合
     * @return 是否为空
     */
    public static boolean isEmpty(List<?> list) {
        return ArrayUtil.isEmpty(list);
    }
    
    /**
     * 判断集合是否不为空
     * @param list 集合
     * @return 是否不为空
     */
    public static boolean isNotEmpty(List<?> list) {
        return ArrayUtil.isNotEmpty(list);
    }
    
    /**
     * 判断字符串是否为数字
     * @param str 字符串
     * @return 是否为数字
     */
    public static boolean isNumber(String str) {
        return NumberUtil.isNumber(str);
    }
    
    /**
     * 字符串转整数
     * @param str 字符串
     * @return 整数
     */
    public static int toInt(String str) {
        return NumberUtil.parseInt(str);
    }
    
    /**
     * 字符串转长整数
     * @param str 字符串
     * @return 长整数
     */
    public static long toLong(String str) {
        return NumberUtil.parseLong(str);
    }
    
    /**
     * 字符串转浮点数
     * @param str 字符串
     * @return 浮点数
     */
    public static double toDouble(String str) {
        return NumberUtil.parseDouble(str);
    }
}